package com.mlh.dp.子序列;

/**
 * @author 缪林辉
 * @date 2024/9/11 10:46
 * @DESCRIPTION
 */
//给你一个整数数组 nums ，请你找出数组中乘积最大的非空连续子数组
// （该子数组中至少包含一个数字），并返回该子数组所对应的乘积。
// nums = [2,3,-2,4]
// 输出: 6
// 解释: 子数组 [2,3] 有最大乘积 6。
public class 乘积最大子数组 {
    public int method1(int[] nums) {
        int len=nums.length;
        long[]max=new long[len];
        long[]min=new long[len];
        long res;
        max[0]=min[0]=res=nums[0];
        for (int i = 1; i <len ; i++) {
            //维护以当前结尾的子数组的最大值和最小值
            //最大值 有可能变为最小值  最小值有可能变为最大值  然后和当前单独的nums[i]进行比较
            //比较出最大值和最小值
            max[i]=Math.max(Math.max(nums[i],max[i-1]*nums[i]),min[i-1]*nums[i]);
            min[i]=Math.min(Math.min(nums[i],max[i-1]*nums[i]),min[i-1]*nums[i]);
            res=Math.max(max[i],res);
        }
        return (int)res;
    }
}
